package com.zenithmind.version.pojo.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Size;
import lombok.Data;

import java.util.List;

/**
 * 创建提交DTO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "创建提交DTO")
public class CommitCreateDTO {

    /**
     * 仓库ID
     */
    @NotBlank(message = "仓库ID不能为空")
    @Schema(description = "仓库ID", example = "1234567890")
    private String repositoryId;

    /**
     * 分支名称
     */
    @NotBlank(message = "分支名称不能为空")
    @Schema(description = "分支名称", example = "main")
    private String branchName;

    /**
     * 提交消息
     */
    @NotBlank(message = "提交消息不能为空")
    @Size(min = 1, max = 200, message = "提交消息长度必须在1-200之间")
    @Schema(description = "提交消息", example = "feat: 添加用户管理功能")
    private String message;

    /**
     * 提交描述
     */
    @Size(max = 1000, message = "提交描述长度不能超过1000")
    @Schema(description = "提交描述", example = "详细的提交说明...")
    private String description;

    /**
     * 文件变更列表
     */
    @NotEmpty(message = "文件变更列表不能为空")
    @Schema(description = "文件变更列表")
    private List<FileChangeDTO> fileChanges;

    /**
     * 文件变更DTO
     */
    @Data
    @Schema(description = "文件变更DTO")
    public static class FileChangeDTO {

        /**
         * 文件路径
         */
        @NotBlank(message = "文件路径不能为空")
        @Schema(description = "文件路径", example = "src/main/java/User.java")
        private String filePath;

        /**
         * 变更类型（1-新增，2-修改，3-删除，4-重命名，5-移动）
         */
        @Schema(description = "变更类型（1-新增，2-修改，3-删除，4-重命名，5-移动）", example = "1")
        private Integer changeType;

        /**
         * 文件内容（Base64编码）
         */
        @Schema(description = "文件内容（Base64编码）")
        private String content;

        /**
         * 旧文件路径（重命名或移动时）
         */
        @Schema(description = "旧文件路径（重命名或移动时）")
        private String oldFilePath;

        /**
         * 文件编码
         */
        @Schema(description = "文件编码", example = "UTF-8")
        private String encoding = "UTF-8";
    }
}
